#include <iostream>
using namespace std;
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <cstring>
#include <cerrno>

// 这里是自定义处理动作的函数
void handler(int signo)
{
    cout << "get a signal...signo:" << signo << endl;
}

int main()
{
    // 使用signal函数自定义SIGINT即2号信号的捕捉方式
    signal(SIGINT, handler);
    while (true)
    {
        cout << "hello signal!...." << "pid:" << getpid() << endl;
        sleep(1);
    }
    return 0;
}

// void handler(int signo)
// {
//     cout<<"get a signo:"<<signo<<endl;
//     exit(1);    //异常还在
// }

// int main()
// {
//     while(true)
//     {
//         cout<<"pid:  "<<getpid()<<endl;
//         sleep(1);
//     }
//     signal(SIGINT, handler);
//     int a = 10;
//     a/=0;
//     return 0;
// }

// int g_cnt = 0;

// void handler(int signo)
// {
//     cout<<"get a sign ..signo:"<<signo<<endl;
//     int n = alarm(5);   //重新设闹钟，返回值为上一次闹钟还剩多少时间才响
//     cout<<"剩余时间："<<n<<endl;
//     //exit(0);
// }

// int main()
// {
//     signal(SIGALRM, handler);
//     alarm(500);
//     int cnt = 0;
//     while(true)
//     {
//         sleep(1);
//         cout<<"cnt:"<<cnt++<<"   pid"<<getpid()<<endl;
//         // if(cnt==2)
//         // {
//         //     int n = alarm(0);   //取消闹钟
//         //     cout<<"alarm 0: ret: "<<n<<endl;
//         // }
//     }
// }

// void handler(int signo)
// {
//     cout<<"get a sign ..signo:"<<signo<<endl;
// }

// int main()
// {
//     signal(2, handler);
//     int cnt = 0;
//     while(true)
//     {
//         cout<<"cnt:"<<cnt++<<endl;
//         sleep(1);
//         if(cnt%5==0)
//         {
//             cout<<"send 2 to caller!"<<"pid:"<<getpid()<<endl;
//             raise(2);
//         }
//     }
// }

//./mykill -9 pid
// int main(int argc, char* argv[])
// {
//     if(argc!=3)
//     {
//         cout<<"Usage:"<<argv[0]<<"-signumber pid"<<endl;
//         return 1;
//     }
//     int signumber = stoi(argv[1]+1);
//     int pid = stoi(argv[2]);
//     int n = kill(pid, signumber);
//     if(n < 0)
//     {
//         cerr<<"kill failed"<<"errno:"<<errno<<"strerror:"<<strerror(errno)<<endl;
//         return 2;
//     }
//     return 0;
// }

// void handle(int signo)
// {
//     cout<<"get a sign ...signo:"<<signo<<endl;
//     exit(0);
// }

// int main()
// {
//     //signal(SIGINT, handle);                //捕捉信号，自定义处理方式
//     signal(SIGINT, SIG_IGN);
//     while(true)
//     {
//         cout<<"I am activing.... pid:"<<getpid()<<endl;
//         sleep(1);
//     }
//     return 0;
// }